#ifndef __CPU_PROFILE
#define __CPU_PROFILE

#define _CPU_ALL               0
#define _CPU_ANY               1
#define _CPU_ISFINITE          2
#define _CPU_ISINF             3 
#define _CPU_ISNAN             4
#define _CPU_ISNEGINF          5
#define _CPU_ISPOSINF          6
#define _CPU_LOGICAL_AND       7
#define _CPU_LOGICAL_OR        8
#define _CPU_LOGICAL_NOT       9
#define _CPU_LOGICAL_XOR      10
#define _CPU_ALLCLOSE         11
#define _CPU_ISCLOSE          12
#define _CPU_GREATER          13
#define _CPU_GREATER_EQUAL    14
#define _CPU_LESS             15
#define _CPU_LESS_EQUAL       16
#define _CPU_EQUAL            17
#define _CPU_NOT_EQUAL        18
#define _CPU_EQUAL2           19
#define _CPU_TRANSPOSE        20
#define _CPU_COPY             21
#define _CPU_FILL_            22
#define _CPU_FILL             23
#define _CPU_SELECT           24
#define _CPU_SELECT_BACK      25
#define _CPU_SET_SELECT       26
#define _CPU_SET_SELECT_BACK  27
#define _CPU_SELECT2          28
#define _CPU_DESELECT         29
#define _CPU_CONCAT           30
#define _CPU_RANGE            31
#define _CPU_EYE              32
#define _CPU_SINGLE_SHIFT     33
#define _CPU_SINGLE_ROTATE    34
#define _CPU_SINGLE_SCALE     35
#define _CPU_SINGLE_FLIP      36
#define _CPU_SINGLE_CROP      37
#define _CPU_SINGLE_CROP_SCALE 38
#define _CPU_SHIFT            39
#define _CPU_ROTATE           40
#define _CPU_SCALE            41
#define _CPU_CROP             42
#define _CPU_CROP_SCALE       43
#define _CPU_SHIFT_RANDOM     44
#define _CPU_ROTATE_RANDOM    45
#define _CPU_SCALE_RANDOM     46
#define _CPU_FLIP_RANDOM      47
#define _CPU_CROP_RANDOM      48
#define _CPU_CROP_SCALE_RANDOM     49
#define _CPU_CUTOUT_RANDOM    50
#define _CPU_RAND_UNIFORM     51
#define _CPU_RAND_SIGNED_UNIFORM 52
#define _CPU_BINARY           53
#define _CPU_RAND_NORMAL      54
#define _CPU_ABS_             55
#define _CPU_ACOS_            56
#define _CPU_ADD_             57
#define _CPU_ASIN_            58
#define _CPU_ATAN_            59
#define _CPU_CEIL_            60
#define _CPU_CLAMP_           61
#define _CPU_COS_             62
#define _CPU_COSH_            63
#define _CPU_EXP_             64
#define _CPU_FLOOR_           65
#define _CPU_INV_             66
#define _CPU_LOG_             67
#define _CPU_LOG2_            68
#define _CPU_LOG10_           69
#define _CPU_LOGN_            70
#define _CPU_MOD_             71
#define _CPU_MULT_            72
#define _CPU_NORMALIZE_       73
#define _CPU_POW_             74
#define _CPU_POWB_            75
#define _CPU_RECIPROCAL_      76
#define _CPU_REMAINDER_       77
#define _CPU_ROUND_           78
#define _CPU_RSQRT_           79
#define _CPU_SIGMOID_         80
#define _CPU_SIGN_            81
#define _CPU_SIN_             82
#define _CPU_SINH_            83
#define _CPU_SQR_             84
#define _CPU_SQRT_            85
#define _CPU_TAN_             86
#define _CPU_TANH_            87
#define _CPU_TRUNC_           88
#define _CPU_ADD              89
#define _CPU_INC              90
#define _CPU_MULT2D           91
#define _CPU_EL_DIV           92
#define _CPU_EL_MULT          93
#define _CPU_SIGN2            94
#define _CPU_SUM2D_ROWWISE    95
#define _CPU_SUM2D_COLWISE    96
#define _CPU_MAX              97
#define _CPU_MIN              98
#define _CPU_SUM              99
#define _CPU_SUM_ABS         100
#define _CPU_REDUCE          101
#define _CPU_REDUCE_OP       102
#define _CPU_REDUCE_SUM2D    103
#define _CPU_REDUCTION       104
#define _CPU_REDUCTION_BACK  105
#define _CPU_RELU            106
#define _CPU_D_RELU          107
#define _CPU_THRESHOLDED_RELU 108
#define _CPU_D_THRESHOLDED_RELU 109
#define _CPU_LEAKY_RELU         110
#define _CPU_D_LEAKY_RELU       111
#define _CPU_ELU                112
#define _CPU_D_ELU              113
#define _CPU_SOFTPLUS           114
#define _CPU_D_SOFTPLUS         115
#define _CPU_SOFTSIGN           116
#define _CPU_D_SOFTSIGN         117
#define _CPU_LINEAR             118
#define _CPU_D_LINEAR           119
#define _CPU_SIGMOID            120
#define _CPU_D_SIGMOID          121
#define _CPU_HARD_SIGMOID       122
#define _CPU_D_HARD_SIGMOID     123
#define _CPU_EXP                124
#define _CPU_D_EXP              125
#define _CPU_TANH               126
#define _CPU_D_TANH             127
#define _CPU_SOFTMAX            128
#define _CPU_D_SOFTMAX          129
#define _CPU_PERMUTE_CHANELS_LAST 130
#define _CPU_PERMUTE_CHANELS_FIRST 131
#define _CPU_PERMUTE_BATCH_LAST    132
#define _CPU_PERMUTE_BATCH_FIRST   133
#define _CPU_IM2COL                134
#define _CPU_CONV2D                135
#define _CPU_CONV2D_GRAD           136
#define _CPU_CONV2D_BACK           137
#define _CPU_CENT                  138
#define _CPU_ACCURACY              139
#define _CPU_MPOOL2D               140
#define _CPU_MPOOL2D_BACK          141
#define _CPU_AVGPOOL2D             142
#define _CPU_AVGPOOL2D_BACK        143
#define _CPU_REPEAT_NN             144
#define _CPU_D_REPEAT_NN           145
#define _CPU_FLIP                  146

#define _NUM_CPU_FUNCS       147
extern int num_instances[_NUM_CPU_FUNCS];
void _profile(int f_id, int end);
void _profile_add_tensor(unsigned long int size);

#endif
